package com.apexcode.common.core.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 状态码枚举类，定义操作结果的状态码和对应的提示信息。
 */
@AllArgsConstructor
@Getter
public enum ResultCode {

    //-------------------------------------------------------------------------
    // 通用操作状态 (1000-1999)
    //-------------------------------------------------------------------------
    /** 操作成功 */
    SUCCESS(1000, "操作成功"),

    //-------------------------------------------------------------------------
    // 服务器错误 (2000-2999)
    //-------------------------------------------------------------------------
    /** 服务器内部错误，提示用户稍后重试 */
    ERROR(2000, "服务繁忙请稍后重试"),

    //-------------------------------------------------------------------------
    // 操作失败（无服务器异常） (3000-3099)
    //-------------------------------------------------------------------------
    /** 通用操作失败 */
    FAILED(3000, "操作失败"),
    /** 未授权访问 */
    FAILED_UNAUTHORIZED(3001, "未授权"),
    /** 参数校验失败 */
    FAILED_PARAMS_VALIDATE(3002, "参数校验失败"),
    /** 资源不存在 */
    FAILED_NOT_EXISTS(3003, "资源不存在"),
    /** 资源已存在 */
    FAILED_ALREADY_EXISTS(3004, "资源已存在"),

    //-------------------------------------------------------------------------
    // 用户相关失败 (3100-3199)
    //-------------------------------------------------------------------------
    /** 用户已存在 */
    FAILED_USER_EXISTS(3101, "用户已存在"),
    /** 用户不存在 */
    FAILED_USER_NOT_EXISTS(3102, "用户不存在"),
    /** 登录失败，账号或密码错误 */
    FAILED_LOGIN(3103, "账号或密码错误"),
    /** 用户被列入黑名单 */
    FAILED_USER_BANNED(3104, "您已被列入黑名单, 请联系管理员"),
    /** 手机号输入错误 */
    FAILED_USER_PHONE(3105, "你输入的手机号有误"),
    /** 操作过于频繁 */
    FAILED_FREQUENT(3106, "操作频繁，请稍后重试"),
    /** 当天请求次数达到上限 */
    FAILED_TIME_LIMIT(3107, "当天请求次数已达到上限"),
    /** 验证码发送失败 */
    FAILED_SEND_CODE(3108, "验证码发送错误"),
    /** 验证码无效 */
    FAILED_INVALID_CODE(3109, "验证码无效"),
    /** 验证码错误 */
    FAILED_ERROR_CODE(3110, "验证码错误"),

    //-------------------------------------------------------------------------
    // 竞赛相关失败 (3200-3299)
    //-------------------------------------------------------------------------
    /** 竞赛开始时间早于当前时间 */
    EXAM_START_TIME_BEFORE_CURRENT_TIME(3201, "竞赛开始时间不能早于当前时间"),
    /** 竞赛开始时间晚于结束时间 */
    EXAM_START_TIME_AFTER_END_TIME(3202, "竞赛开始时间不能晚于竞赛结束时间"),
    /** 竞赛不存在 */
    EXAM_NOT_EXISTS(3203, "竞赛不存在"),
    /** 竞赛新增的题目不存在 */
    EXAM_QUESTION_NOT_EXISTS(3204, "为竞赛新增的题目不存在"),
    /** 竞赛已开始，无法操作 */
    EXAM_STARTED(3205, "竞赛已经开始，无法进行操作"),
    /** 竞赛不包含题目 */
    EXAM_NOT_HAS_QUESTION(3206, "竞赛当中不包含题目"),
    /** 竞赛已结束，无法操作 */
    EXAM_IS_FINISH(3207, "竞赛已经结束不能进行操作"),
    /** 竞赛已发布，无法编辑或删除 */
    EXAM_IS_PUBLISH(3208, "竞赛已经发布不能进行编辑、删除操作"),

    //-------------------------------------------------------------------------
    // 用户竞赛相关失败 (3300-3399)
    //-------------------------------------------------------------------------
    /** 用户已报名，无需重复报名 */
    USER_EXAM_HAS_ENTER(3301, "用户已经报过名，无需重复报名"),

    //-------------------------------------------------------------------------
    // 文件上传相关失败 (3400-3499)
    //-------------------------------------------------------------------------
    /** 文件上传失败 */
    FAILED_FILE_UPLOAD(3401, "文件上传失败"),
    /** 当天上传图片数量超过上限 */
    FAILED_FILE_UPLOAD_TIME_LIMIT(3402, "当天上传图片数量超过上限"),

    //-------------------------------------------------------------------------
    // 题目导航相关失败 (3500-3599)
    //-------------------------------------------------------------------------
    /** 当前已是第一题 */
    FAILED_FIRST_QUESTION(3501, "当前题目已经是第一题了哦"),
    /** 当前已是最后一题 */
    FAILED_LAST_QUESTION(3502, "当前题目已经是最后一题了哦"),

    //-------------------------------------------------------------------------
    // 编程语言支持相关失败 (3600-3699)
    //-------------------------------------------------------------------------
    /** 不支持当前编程语言 */
    FAILED_NOT_SUPPORT_PROGRAM(3601, "当前不支持此语言"),

    //-------------------------------------------------------------------------
    // 消息队列相关失败 (3700-3799)
    //-------------------------------------------------------------------------
    /** MQ 生产消息异常 */
    FAILED_RABBIT_PRODUCE(3701, "mq生产消息异常");

    /** 状态码 */
    private int code;

    /** 提示信息 */
    private String message;
}